package utilidades;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

/** Clase que muestra una ventana con la información de la actualización del programa.
 * @author kevincifuentes
 *
 */
public class InformacionActualizacion extends JFrame{
	
	public static int versionActual=1;

	private JEditorPane infoPane;

	private JScrollPane scp;
	private JButton ok;
	private JButton cancel;
	private JPanel pan1;
	private JPanel pan2;



	/** Constructor con la información a mostrar de la actualización.
	 * @param info Muestra la información de la nueva actualización.
	 */
	public InformacionActualizacion(String info) {
		initComponents();
		infoPane.setText(info);

	}



	/**
	 *  Método que inicializa los componentes de la clase, para mostrar la ventana.
	 */
	private void initComponents() {
		
		this.setLocation(500, 500);
		this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
		this.setTitle("Nueva actualizacion encontrada.");

		pan1 = new JPanel();
		pan1.setLayout(new BorderLayout());

		pan2 = new JPanel();
		pan2.setLayout(new FlowLayout());


		infoPane = new JEditorPane();	
		infoPane.setContentType("text/html");


		scp = new JScrollPane();	
		scp.setViewportView(infoPane);

		ok = new JButton("Actualizar");
		ok.addActionListener( new ActionListener(){



			public void actionPerformed(ActionEvent e) {
				int opcion=JOptionPane.showConfirmDialog(null, "¿Está seguro? El programa se cerrará para llevar a cabo la actualización.", "Cierre de programa", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE);
				if(opcion==0)
				{
					update();
				}
				else
				{
					InformacionActualizacion.this.dispose();
				}
			}

		});

		cancel = new JButton("Cancelar");
		cancel.addActionListener( new ActionListener(){

			public void actionPerformed(ActionEvent e) {
				InformacionActualizacion.this.dispose();
			}
		});

		pan2.add(ok);
		pan2.add(cancel);
		pan1.add(pan2, BorderLayout.SOUTH);
		pan1.add(scp, BorderLayout.CENTER);
		this.add(pan1);
		pack();
		setVisible(true);
		this.setSize(300, 200);

	}
	
	/**
	 *  Método que lanza un jar con el programa de actualización del sistema.
	 */
	private void update()
	{
		String[] run = {"java","-jar","updater/update.jar"};
		try {
			Runtime.getRuntime().exec(run);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		System.exit(0);
	}


	public static void main(String[] args) {   	
		try {
			int versionNueva=Integer.parseInt(actualizador.getLatestVersion());
			System.out.println("Mi versión: "+versionActual+" Versión actual: "+versionNueva);
			if (Integer.parseInt(actualizador.getLatestVersion()) > 1) {    	
				new InformacionActualizacion(actualizador.getWhatsNew());	    	
			}
			else
			{
				JOptionPane.showMessageDialog(null, "Su programa esta actualizado a la versión "+versionActual+".0. No necesita actualizarlo.", "Programa actualizado", JOptionPane.INFORMATION_MESSAGE);
			}

		} catch (Exception ex) {

			ex.printStackTrace();    	
		}
	}



}
